Recruiting service graphical user interface

ABSTRACT

A recruiting service is disclosed that generates profiles of software developers having specific skills. Public code repositories are examined to identify projects of software developers. The projects are analyzed to estimate the number of years of experience a software developer has with an individual language and determine a score with respect to other developers. Social media information and a messaging link may also be provided with each profile. A graphical user interface for displaying the information is disclosed.

CROSS REFERENCE TO RELATED APPLICATIONS

This application claims priority under 35 U.S.C. §120 and is aContinuation of co-pending U.S. patent application Ser. No. 13/493,791,filed Jun. 11, 2012, by Bonmassar et al, which claims priority under 35U.S.C. §119(e) to U.S. Provisional Application No. 61/640,656, filedApr. 30, 2012, entitled RECRUITING SERVICE GRAPHICAL USER INTERFACE, thecontents of each of which are hereby incorporated by reference.

FIELD OF THE INVENTION

The present invention is generally related to employment recruitmenttools. More particularly, the present invention is directed to a userinterface, search technology, and scoring technique to automaticallyprovide information to aid in recruiting software developers.

BACKGROUND OF THE INVENTION

Recruiting skilled software developers is a difficult task. How does onefind qualified candidates? Many of the conventional recruitingapproaches based on reviewing resumes do not work well for recruitingsoftware developers.

One of the problems in the prior art is identifying individuals who haveexpertise in specific software languages as well as the passion andingenuity to solve specific problems. How does a recruiter evaluate theactual skills and talents of prospective candidates? Education alone isnot adequate to determine actual talent. Nor is the number of yearsworking in industry a good measure of talent.

Another problem in the prior art is identifying whether a candidate fora software development position will be a good social fit for a company.Conventional resumes do not provide a good indicator of the social fitof a candidate.

One aspect of these problems in the prior art is that it is difficult toperform a pre-screening to identify talented candidates to fill asoftware development position. As a result, many companies wasteenormous amounts of time trying to find qualified candidates to fillsoftware development positions. Additionally, the difficulties inassessing the actual talent of a candidate means that companiessometimes end up with employees that cannot perform as expected.

SUMMARY OF THE INVENTION

A recruiting service generates a graphical user interface in response toa query. The graphical user interface provides profile information forsoftware developers. The profile information includes a ranking based onanalysis of public code repositories and may also include otherinformation regarding the knowledge, experience, and influence of adeveloper. The profile information may also be augmented with additionalsocial media information, such as social media links for a developer. Amessaging link may also optionally be provided to contact a developer.The recruiting service thus permits a user to input a query to findsoftware developers with specific skills and receive a graphical userinterface providing objective evaluation information based on the codewritten by the developer.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a high level diagram illustrating a recruiting service forsoftware developers in accordance with an embodiment of the presentinvention.

FIG. 2 is a screenshot illustrating a graphical user interfacedisplaying an initial listing of profiles matching a query in accordancewith an embodiment of the present invention.

FIG. 3 is a screenshot illustrating the graphical user displaying afirst portion of an individual profile in accordance with an embodimentof the present invention.

FIG. 4 is a screen shot illustrating the graphical user interfacedisplaying a second portion of an individual profile in accordance withan embodiment of the present invention.

FIG. 5 is a block diagram of a recruiting service in accordance with anembodiment of the present invention.

DETAILED DESCRIPTION

FIG. 1 is a high level system diagram of a recruiting service 100 inaccordance with an embodiment of the present invention. The recruitingservice 100 is a computer-implemented service that may include one ormore servers and associated hardware, such as computer processors, adatabase, and a memory for storing computer program instructions. Therecruiting service 100 accesses information sources on the Internet toobtain information on software developers to develop profile informationthat includes information about the skills and experience of softwaredevelopers.

In some situations a large organization could maintain the recruitingservice as an in-house tool available to users within the organizationvia a local area network or Intranet. However, more generally therecruiting service may be implemented as a web-hosted service availableover the Internet to individuals, companies, or organizations seeking toobtain information on potential candidates for software developmentpositions.

An exemplary set of Internet information sources is illustrated inFIG. 1. One aspect of the present invention is that code repositories105, such as public code repositories, are searched. Public coderepositories are repositories in which programmers can store a softwareproject that they have worked on in an individual repository for othersto view and comment on. Examples of repositories include Github, Inc. ofSan Francisco, California, which permits a programmer to push sourcecode to a repository so that it is accessible and transparent to others.In Github, each project in a repository includes a file history listingeach commit that changed the file along with the author (or authors) foreach commit. Other examples include sites operated by companies andorganizations such as Bit Bucket, Google Code of Google, Inc. ofMountain View California, Source Forge, Launch Pad, and Type, the Apachefoundation and the Mozilla foundation.

At least one other source of information is preferably accessed toobtain additional information for each profile. Another potential sourceof information the recruiting service can access are forum anddiscussion groups 110 used by programmers, such as Stack Overflow(operated by Stack Exchange, Inc. of New York, N.Y.), and news groupslike Hacker News (a social news website about hacking and startupcompanies) or Android developer mailing lists. For example, forum anddiscussion groups may be used to provide a source of information on thereputation and influence of individual developers. Additionally anotheroption is for the recruiting service to access general or social mediasites 115, such as those provided by companies such as Facebook, Inc.and LinkedIn, Inc. Another source of information are contact servicesand social intelligence services 120, which provide resources toidentify individuals from partial contact information and otherwiseexpand an initial set of contact information into a wider set of contactinformation and social information from which links to social media canbe determined. More generally, other public information sources 125 mayalso be searched as well that are relevant to determining the influence,skills, or biographical information about software developers, such asprofessional network sites.

A user utilizes a computer 102 in communication with the recruitingservice 100 via the Internet. The user's computer 102 displays agraphical user interface generated by the recruiting service 100. A usersearching for candidates to fill a software development positionaccesses the recruiting service 100 to input a query 130 defining aninitial candidate specification, such as proficiency in one or moreprogramming languages. Other examples of a candidate specificationinclude a geographical area specification. In response, the graphicaluser interface generated by the recruiting service provides a listing ofprofiles of potential candidates as illustrated by arrow 140, which mayalso be presented in a ranked order. The user can then request moredetailed profile information for individual candidates. An exemplary setof profile information includes the number of years and relative rankingof the candidate in different programming languages, an influence score,overall experience level, a summary of programming projects and links tothe projects, a summary of employment history, and social mediainformation. A messaging link is preferably provided to permit thecandidate to be contacted either directly via email (e.g., via eitheranonymous or non-anonymous email) or by other contact modalities (e.g.,messaging, phone, etc.).

FIG. 2 is a screenshot of an exemplary graphical user interface. Asearch field 205, permits a user to enter queries based on skills. Forexample, in one embodiment a user may input language skills and anyBoolean logic operators (e.g., AND or OR) to define a skill portion ofthe query. A location search field 210 permits the query to be limitedby geographical area and a name field 215 permits the query to belimited by name of the developer. Additionally, it is contemplated thatother search fields could be included, if desired, to focus a search.

In this example, a skill query based on “Java” skills is input intosearch field 205. A search button 207 permits the search to betriggered. This results in an initial listing 220 of profiles 225. Inone implementation the profiles are sorted and ranked by overallknowledge. Other profile information may be displayed in the initiallisting such as the developer's name 227, photo 229 (if available),brief summary of employment history 231 (if available), and rankedscoring 233 in different programming languages including those in thequery and other selected languages for the profile. Thus in thisexample, the ranked scoring includes the Java language ranking first(because the query was for Java) along with other top scores. The userinterface may also provide an indication of the ranking in terms of thetop rankings (e.g., through a set of top rankings, such as top 10%, 20%,or 30%) via a tab other visual indicator. Thus, the user can quicklysearch for profiles in the initial listing corresponding to developersthat are knowledgeable and skilled in a language of interest.

The graphical user interface permits a user to select an individualprofile and then displays detailed profile information for theindividual profile. FIG. 3 illustrates a first portion of an individualprofile for a developer. The profile may include the person's name 227,photo 229 (if available), a brief summary of code analysis 305, fullresults of code analysis 310, knowledge ranking 315 (e.g., a number from0 to 100), overall experience level 320 (estimated number of years ofexperience), influence score 325 (e.g., a number from zero to five), anda messaging link 330.

The code analysis 310 is based on analyzing code from code repositoriesto provide objective information regarding a minimum number of years ofexperience in a particular programming language as well as an objectiveanalysis of the code itself to providing a ranking of the developer'sskills. The full analysis includes the estimated number of years ofexperience with each language. Tabs are provided indicating top rankings(e.g., through a set useful to the end-user, such as top 10%, top 20%,top 30%, etc.). The number of views by others and the adoption of codeby others may be used to generate the influence score 325 as a measureof how influential the programmer is.

FIG. 3B illustrates a second portion of the profile for the developer.The employment history 410 of the developer is summarized when it is isavailable. For example, such employment information is sometimes (butnot always) posted on public websites such as LinkedIn. Social profileinformation 420 is provided, which may include links 425 to social mediawebsites that the developer uses.

A bio summary 430 may be extracted from social media. Alternatively, inone embodiment, a software developer is permitted to check their profileand take ownership of their profile in the sense of providing somelimited voluntary inputs, such as bio summary information, and alsoprovide feedback on any errors.

A summary of projects 440 accessible in code repositories is alsoprovided. The summary preferably also includes links to the code in therepository for each project 445 for users interested in performing amore detailed analysis of the code itself Additionally, informationabout the project may be included such as file size in terms of numberof lines of code, number of views by other developers, and number ofcollaborators.

FIG. 5 illustrates in more detail a functional block diagram of arecruiting service 500 in accordance with an embodiment of the presentinvention. The recruiting service 500 may reside on one or more serverswith associated processors and memory, wherein the computer code isstored on a computer readable memory. A database memory may be providedto store information for the recruiting service, including candidateprofile information.

A crawler 505 is provided to crawl code repositories. For example, thecrawler may use an API for code hosting sites such as GitHub. A newcandidate profile generation module 510 determines whether the crawlerhas identified a new developer. If so, a profile ID is generated tobuild a new profile. A code file type analysis module 515 determined thefile type of files being crawled. After the file type has beendetermined, the language-specific code analysis module is selected bymodule 520. Scoring and cheating detection is then performed by module525. Profiles are stored in a profile information database 530. A socialmedia access module 535 provides access to social media informationsites and a social media aggregation module 540 correlates aggregatedsocial media information for individual profiles. A messaging interface545 is included in one embodiment as a means for recruiters to contactindividual developers. However it will be understood the messaginginterface 545 may be omitted in some implementations. The messaging may,for example, be brokered in the sense of cloaking the user informationand email address of the recruiter during initial attempts to contact adeveloper. A recruiting search engine and graphical user interfacemodule 550 is responsible for generating the graphical user interfacethat is provided for display on a user's computer.

The new candidate profile generation module 510 utilizes authorinformation from crawled sites to detect that there is a new developerto be added to the system. Code repository sites include authorinformation for each project. This author information is searched by thecrawler. Each individual person with a profile has a unique ID. Theunique ID is created the first time an individual programmer's name isdiscovered in crawling author information in code hosting sites. Forexample, when the crawler finds the names of people that havecontributed code to a code hosting site, the system compares the uniqueID from the network that the person is found on to the unique IDs in thedatabase of the recruiting service for that network. If an ID doesn'texist, a new user ID is created.

The crawling process generated project information for each developer.One way to obtain project information for a particular person isspecifically ask a code hosting site (or content site like StackOverflow) for a list of projects for each developer. For example, thismay be done through an API for sites such as GitHub and Stack Overflow.

The crawling is updated regularly and the profiles are refreshedaccording to a cycle. An exemplary refresh cycle is a two-week profilerefresh cycle. That is to say, the update from the crawlers may beconstant, but the profiles may be updated according to a schedule, suchas every two weeks.

One aspect of the crawling process is that the source code for aparticular project is downloaded for analysis. As illustrative examples,the source may be downloaded using technologies such as Git, SVN,Mercury, and CVS, which are technologies that allow for synchronizationwith the local computer of a code repository.

It is preferable to download all of the available information in arepository for analysis. However, note that the source code for aproject may be in any one of a variety of different file types.

Downloaded files are then processed, starting first with the code filetype analysis module 515. An individual file is analyzed to determinewhat's in it by looking at file extensions and the binary data or textthat the file contains. Specific patterns in the source code areanalyzed. For example, specific languages like Ruby—always start with acertain few lines of code—e.g. the hashbang—so that by looking for thepatterns of a specific set of keywords in the file permits the languageto be identified. Additionally, the analysis of the code can includelooking for the “magic number”—a set of bytes at the beginning of thefile that indicates file type. For example, images always start with aspecific byte configuration. The pattern associated with each differentfile type is checked until a match is found. The pattern matching may beperformed, for example, using a sequence of if-then clauses to identifythe file type of a particular file.

After the file type is determined, the language specific code analysisselection module 520 makes a selection of an evaluation tool or toolsappropriate for the language of the file type. Most software languageshave evaluation tools to evaluate the quality and complexity of thecoding. The evaluation tools are specific to a particular language andmay, for example, look at the length of the code and patterns in thecode. For many cases, the evaluation tools for a specific language areopen source and/or available from commercial vendors. For example, thereis a unique set of tools to evaluate Ruby—tools that differ from thoseused to evaluate C++. Thus if the recruiting service is designed toanalyze code in languages such as Java, Scala, Shell, ActionScript, XML,CSS, HTML, Groovy, PHP, Perl, Python, Lisp, etc. then the systemincludes the corresponding evaluation tool for each supported language.Thus, the recruiting service includes a wide range of evaluation toolsto support different languages and makes the selection of the properevaluation tool based on the file type. The file is then analyzed usingthe appropriate selected tool(s) for the language associated with thefile type.

The scoring and cheating detection module 525 utilizes the evaluation ofthe code and also information from the commit log for the file. Toidentify the author of the code of a particular file, the commit log isevaluated for the repository. The commit log is a list of who did whatfor the repository. This permits an evaluation of the developer'sspecific contribution(s) to that project. For example, by analyzing thecommit log an evaluation can be made of the time(s) when the developermade a contribution.

The process is continued for all of the developer's repositories topermit a determination to be made of what languages that a person hasexperience in and how much experience the person has in each language.Recruiting service downloads all the developer's repositories andevaluates their contributions to determine the languages they've writtencode in. To evaluate experience the commit log is examined to look atthe date and time of when the developer contributed to the project.Different factors can be used to determine actual experience. One factoris that contributions can be evaluated by their frequency and regularityto weight the actual number of years of experience in a particularlanguage.

As an illustrative example, consider a developer named Joe. If Joestarted contributing to a project 3 years ago, and the commit log showsthat he's been contributing regularly to it, that's an indication thathe has 3 years of actual experience. Thus, a weighting function can takeinto account the frequency and regularity of Joe's contributions. Forexample, if Joe has been making four or more contributions per yearthat's an indication that Joe has been regularly working on Java.

However, if Joe made a single contribution 3 years ago and justcontributed again for the first time 2 months ago, then the commit logindicates “episodic” contributions with a wide spacing betweencontributions. For this second case, the weighting factor can be used toreduce Joe's number of years of experience such that he does not get 3years of experience credit. The exact weighting function chosen can beempirically determined based on common behavior patterns of softwaredevelopers. For example, if the commit log shows Joe made a singlecontribution to a Java project 3 years ago and made a second smallercontribution a month ago there could be a possibility that Joe iseither 1) trying to “inflate” his resume about the number of years ofexperience he has in Java; or 2) may have become aware of the recruitingservice and is intentionally trying to trick the recruiting service. Inthis example, the weighting function may also include one or more rulesto discount recent contributions, particularly those of a minorcharacter, such as a minor code tweak or a contribution made with manyother contributors.

Thus, while the raw data provides an indication of a maximum potentialnumber of years of experience, a weighting function may includedifferent factors related to frequency of contribution, size ofcontribution, and number of co-contributors to perform a weightingfunction to arrive at a more accurate interpretation of the number ofyears of experience for a developer. The weighting function may bedetermined empirically, based on observations about the way softwaredevelopers normally work, to optimize different weighting factors andperiodically adjusted to discourage gaming of the system. Other types ofgaming (such as posting the same code at different times on differentsites or plagiarizing code from others) could also, in theory, bechecked as part of a larger fraud detection function.

As an illustrative example, patterns in a commit log may be examined forsuspicious factors of how the developer is developing his/her sourcecode. The simplest example of a developer cheating is that the developerdownloads someone else's source code, opens their own repository, andsubmits that same exact code to the new repository. In that case, therewould be a huge update all at once, and then nothing else in terms ofactivity. This is inconsistent with normal commit log behavior in whicha user normally makes a series of regular contributions over time. Anhonest developer would normally (except for perhaps extremely smallprojects) be consistently committing code they are developing for theirproject. As a result when a huge aberrant spike occurs in a commit log apresumption can be made that there is a high likelihood that cheatinghas occurred. In this case, the weighting function can severely ortotally discount the project, i.e., give it extremely little or nocredit.

As previously described, in one embodiment there are three kinds ofscores that are calculated for each developer. These include knowledge,experience and influence. This level of scoring provides a variety ofuseful information to evaluate candidates. However it will be understandthat the recruiting service could also be implemented with a subset ofthis set of scores.

The scores are preferably calculated on a language-specific basis and anoverall basis. Language specific scores are useful to evaluate skills ina particular language. However, generating an overall score provides anadditional indicator of a developer's talent.

An exemplary language-specific scoring process will now be described. Inone implementation, to determine a knowledge score, an examination ismade of lines of code and the number of repositories that the developerhas contributed to. The score is then calculated by a function thatweights the total number of lines of code in all of the differentrepositories. That is, a developer who has written more lines of codehas more experience and credit is given for contributing to differentrepositories. However, the number of lines of code can reach very largenumbers. Thus, one way to score knowledge is apply a logarithm functionbased on the number of lines of code. As one example, a knowledge scorefor a developer can be generated using a natural log curve:ln(lines)×number of repositories, where “x” is the multiplicationoperation and this equation is a simplified equation to illustrate ageneral approach that one of ordinary skill in the art would furtheroptimize for a particular implementation to optimize empirical results.Other variations based on a logarithm function are also possible andother factors could be included in determining a knowledge score.

An exemplary language-specific scoring process for experience looks atdifferent factors indicative of experience and then weights the factors.For example, to calculate a total experience score the individualexperience scores may be combined with work experience, i.e., TotalExperience=Individual experience skill experience scores x workexperience. Of course, many variations are possible in terms ofweighting individual skills experience with work experience. In oneimplementation the process looks at the lines of code that have beenwritten with particular attention to the lines of code written per day,in addition to commits per day, and the number of days of activity. Aweighted function SUM(r) can be used to perform an initial analysis ofexperience in different skills. The scoring can be further weighted bywork experience, resulting in simplified equation to determine alanguage-specific experience score: SUM(r)×Work Experience, where thisequation is a simplified equation to illustrate a general approach thatone of ordinary skill in the art would further optimize for a particularimplementation to optimize empirical results.

An overall score can be calculating by weighting individual scores. Anoverall experience score can be determined as follows:

Experience=Individual experience skill experience scores×workexperience.

An overall knowledge score can be determined using different weightingapproaches. In one approach a logarithm function is used to weight thesum of different knowledge skill scores so that a high score requiresthe developer to have a wide variety of skills:

Knowledge=ln(SUM(Skill Knowledge)), where this equation is a simplifiedequation to illustrate a general approach that one of ordinary skill inthe art would further optimize for a particular implementation tooptimize empirical results.

The influence score is a measure of the developer's influence in thelarger developer community. In one embodiment the influence scoreincludes how much the developer's code influences other developers.Additionally the influence score may include the developer's influencein social media. For example, the influence score may include acomponent based on how a developer's projects have influenced others,based for example on the number of followers, forks, and contributors,which may be determined from data within code hosting repositories.However, an individual developer may have different influence indifferent languages, which has to be taken into account in determiningan overall influence score. Additionally, the developer's influence insocial media may also be considered, such as weighting the influence insocial media by a weighting function. For example, one measure ofinfluence in social media is a Klout score. Thus an exemplary overallinfluence score may be determined as follows:

Influence=f(Klout)+ln(SUM(Skill Influence))

where a developer is given credit for influence in different skills mayalso be given some credit for social media influence and where thisequation is a simplified equation to illustrate a general approach thatone of ordinary skill in the art would further optimize for a particularimplementation to optimize empirical results.

The scoring and weighting functions that are applied are determinedempirically to give a desired distribution based, for example byexamining what weighting functions give the best real-world results at aparticular point in time for recruiters. Thus, for example, the actualconstants used as weighting factors and aspects of the weightingfunctions may be varied based on feedback on the usefulness of thescoring for simulated or actual recruiting efforts.

For example, when calculating knowledge, one approach is to look forextensive experience in several languages. This is because in the realworld highly knowledgeable developers have a broad range of experiencesto draw upon and are skilled in different languages. Thus, even if adeveloper has top 10% scores in one or two languages, they cannot get atop 10% overall knowledge score, because that only happens when thedeveloper has top-tier scores in several languages. That is to say,breadth counts.

The public code repositories are crawled on a regular basis. In oneembodiment all the raw data obtained from a crawl of the public coderepositories is saved, except for the source code. That is, it ispreferable to save the information obtained by analyzing the code, inaddition to the source log itself The next time the crawler encountersthat repository, the source code is downloaded again, and a “refresh” ismade based on new contributions. Additionally, the logs are checked todetermine the individual(s) that made the new contribution. Thus, ifMichael has a repository with a project, the system will also confirmfrom the log entries who made any new contributions. Thus if Luca makesa follow-on contribution to Michael's project, the follow-oncontribution will be credited to Luca. This cross-checking of whichindividual made which new contribution to a project is useful to improveaccuracy and reliability of the scoring.

The social media access module 535 and the social media aggregationmodule 540 provide a comprehensive set of social media links for eachprofile. The author information obtained from public repository sitessuch as GitHub and Stack Overflow may be incomplete or containinaccuracies. However typically the author information will include atleast an email address and perhaps also a name. This information canthen be used to obtain additional social media information usingcommercial services such as Full Contact, Inc. of Denver, Colo.,Fliptop, Inc. of San Francisco, Calif. and Rap Leaf of San Francisco,Calif. Many commercial services check by unique information, like emailaddress, or a hash of the email address (a hash is a unique numbergenerated by an email address. That way, companies can match users byemail addresses, but protect their privacy by looking at hash numbers).In one embodiment a search of social media sites is performed of all ofthe sites listed under Full Contact's set of Social Network Types. Fromthis information profile information identifying the names of developersmay be generated along with associated information. For example, workhistory may also be scraped from social networking sites.

Direct scanning of social media sites is also an option, such as theoption of scanning sites such as LinkedIn and Google Plus. However,there's usually not a one-to-one results process. For example, if adeveloper has a common name, such as “John Smith,” a scan based on theirname may turn up more than one hit. To find additional social medialinks for a particular profile it is thus desirable to look for multiplematching factors (location, title, company, name, etc.), and thencalculate the probability that it's a match. If the probability ishigher than a certain number, the system automatically merges theprofiles. If the probability is less than that threshold, the systemsends a notification that there needs to be a manual review process.

Once links to social media are identified for a developer they can berefreshed at a rate slower than other information in the public coderepositories. Individuals typically add new social networks infrequentlyand the URLs of social media sites are generally static.

The graphical user interface discussed in this application includes aset of features that are useful in making recruiting decisions. However,it will be understood that subsets of these features may be used. Thatis, one of ordinary skill in the art would understand that variations inthe graphical user interface to include variations of what has beendescribed are possible.

It will also be understood that the scoring techniques described areexemplary. As software evaluation tools increase in their capabilitiesit will also be understood that other metrics of coding quality and/orcomplexity could be utilized.

While the invention has been described in conjunction with specificembodiments, it will be understood that it is not intended to limit theinvention to the described embodiments. On the contrary, it is intendedto cover alternatives, modifications, and equivalents as may be includedwithin the spirit and scope of the invention as defined by the appendedclaims. The present invention may be practiced without some or all ofthese specific details. In addition, well known features may not havebeen described in detail to avoid unnecessarily obscuring the invention.

In accordance with the present invention, the components, process steps,and/or data structures may be implemented using various types ofoperating systems, programming languages, computing platforms, computerprograms, and/or general purpose machines. Methods and graphical userinterfaces of the present invention may also be tangibly embodied as aset of computer instructions stored on a computer readable medium, suchas a memory device.

1-21. (canceled)
 22. A non-transitory machine readable medium storing arecruiting application executable by at least one processing unit of adevice, the recruiting application comprising sets of instructions for:periodically searching a set of data sources to obtain differentinformation about a plurality of candidates for recruiting; for each ofthe plurality of candidates: determining whether a profile has beenpreviously generated and stored in a data storage; and when no profilehas been previously generated for the candidate, automaticallygenerating a profile based on the information obtained for the candidateand storing the generated profile in the data storage, the profilecomprising a set of programming languages the candidate knows, a levelof proficiency of the candidate in each programming language, and anoverall knowledge level of the candidate; upon receiving a request forcandidates with a particular specification, retrieving a set of profilesfrom the plurality of profiles stored in the data storage that match theparticular specification; and displaying a list of profiles in agraphical user interface (GUI), wherein each profile of the retrievedset of profiles appears in the list based on the overall knowledge levelassociated with the profile.
 23. The non-transitory machine readablemedium of claim 22, wherein the set of instructions for periodicallysearching comprises a set of instructions for periodically searching aset of source code repositories through a set of application programminginterfaces (APIs) provided by the source code repositories.
 24. Thenon-transitory machine readable medium of claim 23, wherein the set ofinstructions for generating the profile based on the informationobtained comprises sets of instructions for automatically: receiving aset of source codes authored by the candidate from the source coderepository system; and for each source code in the set: determining aprogramming language in which the source code is written; identifying anevaluation tool particular to the identified programming language; andanalyzing the source code using the identified evaluation tool in orderto identify the level of proficiency of the candidate in the programminglanguage.
 25. The non-transitory machine readable medium of claim 22,wherein the particular specification comprises at least one of aparticular programming language, a location of employment, and a name ofthe candidate.
 26. The non-transitory machine readable medium of claim25, wherein the set of instructions for retrieving the set of profilescomprises a set of instructions for retrieving the profiles that includethe particular programming language in the set of programming languagesassociated with the profiles.
 27. The non-transitory machine readablemedium of claim 22, wherein the recruiting application further comprisesa set of instructions for, when a profile has been previously generatedfor the candidate, updating the profile with new information obtainedfor the candidate in the data storage.
 28. The non-transitory machinereadable medium of claim 22, wherein the set of instructions fordisplaying the list of profiles comprises a set of instructions fordisplaying, for each profile, at least one of a name of the candidate, asummary of employment history of the candidate, a subset of theprogramming languages associated with the candidate, and a ranking scorefor each programming language in the subset.
 29. The non-transitorymachine readable medium of claim 28, wherein the recruiting applicationfurther comprises sets of instructions for: receiving a selection of aparticular profile in the list; and providing additional informationabout the candidate associated with the profile.
 30. The non-transitorymachine readable medium of claim 29, wherein the set of instructions forproviding the additional information comprises a set of instructions fordisplaying at least one of a number of years the candidate hasexperience in each programming language of the set of programminglanguages associated with the profile, an influence score of thecandidate, an experience level of the candidate, a summary of softwareprojects in which the candidate is involved, and a link to each softwareproject.
 31. The non-transitory machine readable medium of claim 30,wherein the recruiting application further comprises a set ofinstructions for, upon selection of a link to a software project,providing additional information about the software project, additionalinformation comprising a commit log and a set of source codes associatedwith the software project.
 32. The non-transitory machine readablemedium of claim 31, wherein the set of instructions for providing thenumber of years the candidate has experience in each programminglanguage comprises a set of instructions for providing the number ofyears of experience based on the data included in the commit logsassociated with the software projects.
 33. The non-transitory machinereadable medium of claim 32, wherein the set of instructions forproviding the experience level of the candidate comprises a set ofinstructions for providing the experience level of the candidate basedon a combination of the number of years the candidate has experience ineach programming language and a set of additional factors received fromthe set of data sources.
 34. The non-transitory machine readable mediumof claim 22, wherein the set of data sources comprises at least one of asource code repository, a programmers forum, and a social media website.35. The non-transitory machine readable medium of claim 34, wherein thesource code repository comprises different software projects created bythe different software programmers for other users of the repository toview and comment on the different software projects.
 36. Thenon-transitory machine readable medium of claim 34, wherein each profilein the set of profiles further comprises an influence score for thecandidate.
 37. The non-transitory machine readable medium of claim 36,wherein the influence score of the candidate comprises a measure of thecandidate's influence in a software community calculated, wherein theinfluence score is calculated based on information obtained from theprogrammers forum.
 38. The non-transitory machine readable medium ofclaim 37, wherein the influence score of the candidate is furthercalculated based on information obtained from the social media website.39. The non-transitory machine readable medium of claim 22, wherein theset of data sources comprises at least a software repository storing aplurality of software projects stored by a plurality of softwaredevelopers, wherein each software project comprises a commit log and aset of source codes.
 40. The non-transitory machine readable medium ofclaim 39, wherein the commit log for each software project identifies anauthor of each source code in the set of source codes and a date andtime at which the source code is committed to the software project. 41.The non-transitory machine readable medium of claim 40, wherein the setof profiles further comprises a number of years the candidate hasexperience in each programming language, wherein the set of instructionsfor generating the set of profiles comprises a set of instructions forcalculating the number of years the candidate has experience based on acombination of dates and times each source code is committed to thesoftware projects associated with the candidate.